package map;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 老安
 * @data 2022/7/5 21:51
 * java.util.Map 接口 查找表
 * Map体现的结构是一个多行两列的表格,其中左列称为"key",右列称为"value"
 * Map总是以key-value的结构存储一组数据.并且可以通过key找到对应的value
 * Map有一个要求,key不允许重复
 *
 * 常用的实现类:
 * java.util.HashMap 我们称它为"散列表".当今查询速度最快的数据结构
 */
public class MapDemo {
    public static void main(String[] args) {
        //一般需要指定map的泛型,需要指定key和value
        //String是key的泛型, Integer 是value的泛型
        Map<String,Integer> map = new HashMap();
        //给map存入值
        /*
        * V put(K key,V value)
        * 向当前Map中保存一组键值对
        * 如果put的元素没有被替换,返回null,
        * 如果被替换了,就返回被替换的value值
        * */
        map.put("语文", 99);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        //{物理=96, 化学=99, 语文=99, 英语=97}
        //可以看出,map是无序的(不会记录存储的元素的顺序),但是不会影响什么
        System.out.println(map);
        //当再次存储元素时,恰巧key已经存在了,新的value会将key对应的value覆盖
        map.put("化学", 77);
        System.out.println(map);
        //value重复无所谓
        map.put("数学", 77);
        System.out.println(map);
        //put时,元素不存在,返回null,但是默认返回的是Integer类型,而声明时,是int类型,所以会动拆箱
        Integer score = map.put("体育", 100);
        System.out.println(score);
        System.out.println(map);
        score = map.put("体育", 110);
        System.out.println(score);
        System.out.println(map);

        /*
        * V get(Object key)
        * 根据给定的key获取对应的value,如果给定的key不存在,则返回null
        * */
        Integer value = map.get("语文");
        System.out.println("语文:"+value);
        value = map.get("美术");
        System.out.println("美术:"+value);
        //返回当前map的元素个数
        int size = map.size();
        System.out.println("元素个数:"+size);

        /*
        * V remove(Object key)
        * 根据key删除给定的map的元素,并且将删除的value返回
        * */
        value = map.remove("数学");
        System.out.println(value);
        System.out.println(map);
        boolean ck = map.containsKey("英语");
        System.out.println("包含key:"+ck);
        boolean cv = map.containsValue(97);
        System.out.println("包含value:"+cv);
    }
}
